/**
 * Création du tableau des enregistrements
 * @param doc : le document XML à partir duquel on va lire
 * @param zone : la zone HTML dans laquelle on va écrire
 * @param nomTable : le nom de la table concernée
 */
function creerTableau(doc, zone, nomTable)
{
    var rows = doc.getElementsByTagName("row");
    var tab = document.createElement("table");
    tab.name = 'tableau';
    tab.border = 1;

    //var nomIdentifiant = doc.documentElement.children[doc.documentElement.children.length-1].firstChild.textContent;
    //On ne gère que les identifiants où il n'y a qu'une seule colonne
    var nomIdentifiant = doc.getElementsByTagName("idprimarykey")[0].firstChild.textContent;
    var foreignKeys = doc.getElementsByTagName("idforeignkey");

    //Création de l'en-tête du tableau
    if(rows.length > 0)
    {
        var ligne = document.createElement("tr");

        for(var j = 0 ; j < rows[0].children.length ; j++)
        {
            var tabCase = document.createElement("th");
            var nomColonne = rows[0].children[j].nodeName;
            tabCase.innerHTML = nomColonne;

            //On indique s'il s'agit d'une clé primaire
            if(nomColonne == nomIdentifiant)
                tabCase.innerHTML += "<br>(Primary)";

            //On indique s'il s'agit d'une clé étrangère
            for(var k = 0 ; k < foreignKeys.length ; k++)
            {
                var cleEtrangere = foreignKeys[k].firstChild.textContent;

                //Est-ce qu'il s'agit d'une clé étrangère?
                if(nomColonne == cleEtrangere)
                {
                    tabCase.innerHTML += "<br>(Foreign)";
                }
            }

            ligne.appendChild(tabCase);
        }

        var tabCase = document.createElement("th");
        tabCase.innerHTML = "Modifier"
        ligne.appendChild(tabCase);

        var tabCase = document.createElement("th");
        tabCase.innerHTML = "Supprimer"
        ligne.appendChild(tabCase);

        tab.appendChild(ligne);
    }

    //Pour chaque enregistrement
    for(var i = 0 ; i < rows.length ; i++)
    {
        var ligne = document.createElement("tr");

        for(var j = 0 ; j < rows[i].children.length ; j++)
        {
            var tabCase = document.createElement("td");

            //Est-ce que la valeur est à vide?
            if(rows[i].children[j].firstChild != null)
            {
                var textCase = rows[i].children[j].firstChild.textContent;

                var nomColonne = rows[i].children[j].nodeName;

                //Est-ce qu'il s'agit de la clé primaire?
                if(nomColonne == nomIdentifiant)
                {
                    //Est-ce qu'il s'agit aussi d'une clé étrangère? Si oui elle a priorité (le lien hypertexte pointera sur la clé étrangère)
                    var estCleEtrangere = setCleEtrangere(foreignKeys, textCase, nomColonne, tabCase);

                    var identifiant = textCase;

                    if(estCleEtrangere == 'non')
                        tabCase.innerHTML = "<a href=\"clientWebServlet?action=getRecord&nomTable=" + nomTable + "&idprimarykey=" + textCase + "\">" + textCase + "</a>";
                }
                else
                {
                    //Est-ce qu'il s'agit d'une clé étrangère?
                    var estCleEtrangere = setCleEtrangere(foreignKeys, textCase, nomColonne, tabCase);

                    if(estCleEtrangere == 'non')
                        tabCase.innerHTML = textCase;
                }
            }

            else
                //Mettre la grille à vide au lieu de tout blanc quand c'est vide
                tabCase.innerHTML = "&nbsp";

            ligne.appendChild(tabCase);
        }

        //Créer le lien pour la modification
        var tabCase = document.createElement("td");
        tabCase.innerHTML = "<a href=\"clientWebServlet?action=commande&ordre=modifier&nomTable=" + nomTable + "&idprimarykey=" + identifiant + "\"><img src=\"modifier.gif\" alt=\"Modifier\"></a>";
        ligne.appendChild(tabCase);

        //Créer le lien pour la suppression
        var tabCase = document.createElement("td");
        tabCase.innerHTML = "<a href=\"#\" onClick=\"confirmerSuppression('clientWebServlet?action=deleteRecord&nomTable=" + nomTable + "&idprimarykey=" + identifiant + "')\"><img src=\"supprimer.gif\" alt=\"Supprimer\"></a>";
        ligne.appendChild(tabCase);

        tab.appendChild(ligne);
    }

    zone.appendChild(tab);
}

/**
 * Crée le lien hypertexte de clé étrangère d'une valeur
 * @param foreignKeys : l'arbre XML contenant les contraintes de clés étrangères
 * @param textCase : la valeur à écrire dans la case
 * @param nomColonne : le nom de la colonne de la table
 * @param tabCase : la case du tableau dans laquelle on va écrire
 * @return si la colonne est une clé étrangère, on renvoie 'oui'
 */
function setCleEtrangere(foreignKeys, textCase, nomColonne, tabCase)
{
    var estCleEtrangere = 'non';

    //Pour chaque contrainte de clé étrangère
    for(var k = 0 ; k < foreignKeys.length ; k++)
    {
        var cleEtrangere = foreignKeys[k].firstChild.textContent;

        //Est-ce qu'il s'agit d'une clé étrangère?
        if(nomColonne == cleEtrangere)
        {
            estCleEtrangere = 'oui';
            tabCase.innerHTML = "<a href=\"clientWebServlet?action=getRecord&nomTable=" + foreignKeys[k].getAttribute("referenceTable") + "&idprimarykey=" + textCase + "\">" + textCase + "</a>";
            break;
        }
    }

    return estCleEtrangere;

}

/**
 * Fenêtre demandant confirmation pour une suppression
 * @param lien : Si on confirme la suppression, on va appeler le serveur à ce lien
 */
function confirmerSuppression(lien)
{
    var confirmation = confirm("Voulez-vous vraiment supprimer cet enregistrement ?") ;
    if(confirmation)
    {
        document.location.href = lien;
    }
}
            